/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package consultorio;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
// http://jc-mouse.blogspot.mx/2011/01/crear-copia-de-seguridad-backup-de.html
// http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

/**
 *
 * @author CarlosDiaz
 */
public class Backup {

    private int BUFFER = 10485760;  // Cantidad de posiciones del arreglo
    private String mysql = "C:/wamp/bin/mysql/mysql5.5.24/bin/mysqldump.exe";
    private String host = "localhost";
    private String port = "3306";
    private String user = "root";
    private String pass = "";
    private String db = "consultorio";
    private String backup = "d:/fichero.sql";

    public boolean create() {
        char[] charBuffer = new char[BUFFER];
        StringBuffer temp = null;
        FileWriter file = null;
        int count = 0;

        try {
            // Sentencia que se ejecuta en linea de comandos para generar el backup de la base de datos
            Process run = Runtime.getRuntime().exec(
                    this.mysql                    // Ruta del archivo mysqldump.exe
                    + " --host=" + this.host      // Host en donde se encuentra la base de datos
                    + " --port=" + this.port      // Puerto de conexion de mysql
                    + " --user=" + this.user      // Usuario de mysql
                    + " --password=" + this.pass  // Contraseña de acceso a la base de datos
                    + " --skip-comments "         // Omite los comentarios de la base de datos
                    + " " + this.db);             // Nombre de la base de datos a respaldar

            // Se guarda en memoria el backup completo
            InputStream input = run.getInputStream();
            // Lee lo que se encuentra en la memoria
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            // Variable en donde se almacena lo que se va leyendo
            temp = new StringBuffer();

            while ((count = reader.read(charBuffer, 0, BUFFER)) != -1) {
                temp.append(charBuffer, 0, count);
            }

            reader.close();
            input.close();

            // Se crea y escribe el archivo SQL 
            file = new FileWriter(this.backup);
            PrintWriter write = new PrintWriter(file);
            write.println(temp.toString());
            return true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (null != file) {
                    file.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return false;
    }
}
